from flask_sqlalchemy import SQLAlchemy  # 数据库ORM

# 初始化SQLAlchemy数据库实例（关联Flask应用，后续通过db操作数据库）
db = SQLAlchemy()


# ==============================================================================
# 3. 数据库模型定义：映射数据库表结构（ORM核心）
# ==============================================================================
class User(db.Model):
    """用户模型：对应数据库中的user表"""
    id = db.Column(db.Integer, primary_key=True)  # 主键ID（自增）
    username = db.Column(db.String(30), unique=True, nullable=False)  # 用户名（唯一、非空）
    email = db.Column(db.String(50), unique=True, nullable=False)  # 邮箱（唯一、非空）
    password_hash = db.Column(db.String(128), nullable=False)  # 密码哈希（非空，存储加密后的密码）
    created_at = db.Column(db.String(20), nullable=False)  # 创建时间戳（非空，字符串格式）


class Movie(db.Model):
    """电影模型：对应数据库中的movie表"""
    # 表名默认是类名小写（可通过__tablename__手动指定）
    id = db.Column(db.Integer, primary_key=True)  # 主键ID（自增）
    title = db.Column(db.String(60), nullable=False)  # 电影标题（非空，最长60字符）
    year = db.Column(db.Integer, nullable=False)  # 上映年份（非空）
    genre = db.Column(db.String(30), nullable=False)  # 电影类型（非空，最长30字符）
    rating = db.Column(db.Float, nullable=False)  # 评分（非空，浮点型）
    poster_url = db.Column(db.String(200), nullable=False)  # 海报图片URL（非空，最长200字符）
    description = db.Column(db.Text, default='暂无介绍')  # 电影描述（文本类型，默认值）
    created_at = db.Column(db.String(20), nullable=False)  # 创建时间戳（非空，字符串格式）
    updated_at = db.Column(db.String(20), nullable=False)  # 更新时间戳（非空，字符串格式）
